/*
* 给定一个字符串str
* 和一个字符s
* 返回一个数组，该数组存放着字符串str里面每一个字符 到 指定字符s 之间的最短距离
*
* let str = "iloveyou"
* 当s = e时,
* [4,3,2,1,0,1,2,3]
*
* 当s = o时,
* [2,1,0,1,2,1,0,1]
*
* 方法一：切割
* 以给定字符为标准，切割成3块字符串
* "il" "vey" "uverymuch"
* "21"       "123456789"
* 前面一份是该字符串长度的倒序，后面一份是该字符串长度的正序
* 中间一份要判断，奇数还是偶数
* 奇数：（n-1）/2时 前：（n-1）/2 -> 1 后：1 -> （n-1）/2
* 偶数：n/2时 前：n/2 -> 1 后：1 -> n/2
*
* 方法二：头铁法（任何一种语言都能用）
*
* */
//方法一：split（写不出啊！）
function myLength(fatherStr,sonStr){
    let saveArr = fatherStr.split(sonStr) //用一个数组来暂时存储切割好的部分字符串
    let resultArr = [] //最终的结构数组
    console.log(saveArr)

    //遍历该数组中每一字符串
    for(let i = 0; i < saveArr.length; i++){

        if(strIsEvenNum(saveArr[i])){ //如果该字符串是偶数
            if(saveArr[i].length === 0){
                resultArr.push(0)
            }
            for(let j = 0; j < (saveArr[i].length/2); j++){
                resultArr.push(j)
            }
            for(let k = (saveArr[i].length/2); k > 1; k--){
                resultArr.push(k)
            }
        }else{ //否则就是奇数
            if(saveArr[i].length === 0){
                resultArr.push(0)
            }
            for(let s = 0; s < (saveArr[i].length/2); s++){
                resultArr.push(s)
            }
            for(let t = (saveArr[i].length/2); t > 1; t--){
                resultArr.push(t)
            }
        }
    }
    return resultArr
}

function strIsEvenNum(str){ //判断字符串长度是否为偶数
    return (str % 2 === 0)
}

let str3 = "12334611314123141"
myLength(str3,"1")


//方法二：头铁法（任何一种语言都能用）
function shortLength(str,s){ //字符串 指定字符
    let strLength = str.length //字符串长度
    let sPosition = [] //用于存储指定字符的位置的数组
    for(let i = 0; i < strLength; i++){ //遍历字符串的每一位字符
        if(str[i] === s){ //只要字符串里的字符与给定字符一致，就把它的下标位置记录到sPosition数组中
            sPosition.push(i)
        }
    }
    let result = [] //结果数组
    for(let i = 0; i < strLength; i++){ //遍历字符串的每一位字符
        if(str[i] === s){ //只要字符串里的字符与给定字符一致，就在结果数组中记录距离为0
            result.push(0)
        }else{
            let minLength = strLength //默认最短路径为str的长度，遇到更短就更新
            for(let j = 0; j < sPosition.length; j++){ //遍历存储指定字符位置的数组
                let distance = Math.abs(sPosition[j] - i) //distance是每一个字符到指定字符的距离
                //用绝对值表示，因为可能为负数

                if(minLength > distance){ //如果默认了最小距离 > distance
                    minLength = distance //就更新默认最小距离
                }
            }
            //遍历完之后将每个字符的最短距离添加到结果数组中
            result.push(minLength)
        }
    }
    //最后返回结果数组
    return result
}

let str = "iloveyouverymuch"
let s = "u"
shortLength(str,s)